<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Calico: calico::sensors::Camera Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Calico
   </div>
   <div id="projectbrief">A visual-inertial calibration library designed for rapid problem construction and debugging.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespacecalico.html">calico</a></li><li class="navelem"><a class="el" href="namespacecalico_1_1sensors.html">sensors</a></li><li class="navelem"><a class="el" href="classcalico_1_1sensors_1_1Camera.html">Camera</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classcalico_1_1sensors_1_1Camera-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">calico::sensors::Camera Class Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p><a class="el" href="classcalico_1_1sensors_1_1Camera.html" title="Camera class.">Camera</a> class.  
 <a href="classcalico_1_1sensors_1_1Camera.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="camera_8h_source.html">camera.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for calico::sensors::Camera:</div>
<div class="dyncontent">
<div class="center"><img src="classcalico_1_1sensors_1_1Camera__inherit__graph.png" border="0" usemap="#acalico_1_1sensors_1_1Camera_inherit__map" alt="Inheritance graph"/></div>
<map name="acalico_1_1sensors_1_1Camera_inherit__map" id="acalico_1_1sensors_1_1Camera_inherit__map">
<area shape="rect" title="Camera class." alt="" coords="5,80,164,107"/>
<area shape="rect" href="classcalico_1_1sensors_1_1Sensor.html" title=" " alt="" coords="7,5,162,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for calico::sensors::Camera:</div>
<div class="dyncontent">
<div class="center"><img src="classcalico_1_1sensors_1_1Camera__coll__graph.png" border="0" usemap="#acalico_1_1sensors_1_1Camera_coll__map" alt="Collaboration graph"/></div>
<map name="acalico_1_1sensors_1_1Camera_coll__map" id="acalico_1_1sensors_1_1Camera_coll__map">
<area shape="rect" title="Camera class." alt="" coords="5,80,164,107"/>
<area shape="rect" href="classcalico_1_1sensors_1_1Sensor.html" title=" " alt="" coords="7,5,162,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a45522a7e9026840541319cea5a145dc7"><td class="memItemLeft" align="right" valign="top"><a id="a45522a7e9026840541319cea5a145dc7"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>Camera</b> (const <a class="el" href="classcalico_1_1sensors_1_1Camera.html">Camera</a> &amp;)=delete</td></tr>
<tr class="separator:a45522a7e9026840541319cea5a145dc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a53517bc5bf4c7686d9e00ff276d6a3"><td class="memItemLeft" align="right" valign="top"><a id="a3a53517bc5bf4c7686d9e00ff276d6a3"></a>
<a class="el" href="classcalico_1_1sensors_1_1Camera.html">Camera</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classcalico_1_1sensors_1_1Camera.html">Camera</a> &amp;)=delete</td></tr>
<tr class="separator:a3a53517bc5bf4c7686d9e00ff276d6a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a446c4472199355503ca2b663ce581444"><td class="memItemLeft" align="right" valign="top"><a id="a446c4472199355503ca2b663ce581444"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a446c4472199355503ca2b663ce581444">SetName</a> (const std::string &amp;name) final</td></tr>
<tr class="memdesc:a446c4472199355503ca2b663ce581444"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setter for name. <br /></td></tr>
<tr class="separator:a446c4472199355503ca2b663ce581444"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a02dbe718f246c469e6973d80f508ad50"><td class="memItemLeft" align="right" valign="top"><a id="a02dbe718f246c469e6973d80f508ad50"></a>
const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a02dbe718f246c469e6973d80f508ad50">GetName</a> () const final</td></tr>
<tr class="memdesc:a02dbe718f246c469e6973d80f508ad50"><td class="mdescLeft">&#160;</td><td class="mdescRight">Getter for name. <br /></td></tr>
<tr class="separator:a02dbe718f246c469e6973d80f508ad50"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a54e98ce1b88ddcfcc1853e7d6c95a2d9"><td class="memItemLeft" align="right" valign="top"><a id="a54e98ce1b88ddcfcc1853e7d6c95a2d9"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a54e98ce1b88ddcfcc1853e7d6c95a2d9">SetExtrinsics</a> (const <a class="el" href="classcalico_1_1Pose3.html">Pose3d</a> &amp;T_sensorrig_sensor) final</td></tr>
<tr class="memdesc:a54e98ce1b88ddcfcc1853e7d6c95a2d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setter for extrinsics parameters. <br /></td></tr>
<tr class="separator:a54e98ce1b88ddcfcc1853e7d6c95a2d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8db09cca224532a6c4ad0bc61d3d8c1f"><td class="memItemLeft" align="right" valign="top"><a id="a8db09cca224532a6c4ad0bc61d3d8c1f"></a>
const <a class="el" href="classcalico_1_1Pose3.html">Pose3d</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a8db09cca224532a6c4ad0bc61d3d8c1f">GetExtrinsics</a> () const final</td></tr>
<tr class="memdesc:a8db09cca224532a6c4ad0bc61d3d8c1f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Getter for extrinsics parameters. <br /></td></tr>
<tr class="separator:a8db09cca224532a6c4ad0bc61d3d8c1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab917354fc8b654b807f92cac6f635f48"><td class="memItemLeft" align="right" valign="top"><a id="ab917354fc8b654b807f92cac6f635f48"></a>
absl::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#ab917354fc8b654b807f92cac6f635f48">SetIntrinsics</a> (const Eigen::VectorXd &amp;intrinsics) final</td></tr>
<tr class="memdesc:ab917354fc8b654b807f92cac6f635f48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setter for intrinsics parameters. <br /></td></tr>
<tr class="separator:ab917354fc8b654b807f92cac6f635f48"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a22485fdb870293142109023196de4189"><td class="memItemLeft" align="right" valign="top"><a id="a22485fdb870293142109023196de4189"></a>
const Eigen::VectorXd &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a22485fdb870293142109023196de4189">GetIntrinsics</a> () const final</td></tr>
<tr class="memdesc:a22485fdb870293142109023196de4189"><td class="mdescLeft">&#160;</td><td class="mdescRight">Getter for intrinsics parameters. <br /></td></tr>
<tr class="separator:a22485fdb870293142109023196de4189"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:addccd575e2e85e846b6b5197d007d12a"><td class="memItemLeft" align="right" valign="top"><a id="addccd575e2e85e846b6b5197d007d12a"></a>
absl::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#addccd575e2e85e846b6b5197d007d12a">SetLatency</a> (double latency) final</td></tr>
<tr class="memdesc:addccd575e2e85e846b6b5197d007d12a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setter for sensor latency. <br /></td></tr>
<tr class="separator:addccd575e2e85e846b6b5197d007d12a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8096777057130a9cc5f49459fd8b60a5"><td class="memItemLeft" align="right" valign="top"><a id="a8096777057130a9cc5f49459fd8b60a5"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a8096777057130a9cc5f49459fd8b60a5">GetLatency</a> () const final</td></tr>
<tr class="memdesc:a8096777057130a9cc5f49459fd8b60a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Getter for sensor latency. <br /></td></tr>
<tr class="separator:a8096777057130a9cc5f49459fd8b60a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3eb0820967e0be7ca022d50702434a3a"><td class="memItemLeft" align="right" valign="top"><a id="a3eb0820967e0be7ca022d50702434a3a"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a3eb0820967e0be7ca022d50702434a3a">EnableExtrinsicsEstimation</a> (bool enable) final</td></tr>
<tr class="memdesc:a3eb0820967e0be7ca022d50702434a3a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable or disable extrinsics estimation. <br /></td></tr>
<tr class="separator:a3eb0820967e0be7ca022d50702434a3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a474b22e15bb9abb686fb7ec2217c72df"><td class="memItemLeft" align="right" valign="top"><a id="a474b22e15bb9abb686fb7ec2217c72df"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a474b22e15bb9abb686fb7ec2217c72df">EnableIntrinsicsEstimation</a> (bool enable) final</td></tr>
<tr class="memdesc:a474b22e15bb9abb686fb7ec2217c72df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable or disable intrinsics estimation. <br /></td></tr>
<tr class="separator:a474b22e15bb9abb686fb7ec2217c72df"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11089f69528b17f77a53101c98d32b26"><td class="memItemLeft" align="right" valign="top"><a id="a11089f69528b17f77a53101c98d32b26"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a11089f69528b17f77a53101c98d32b26">EnableLatencyEstimation</a> (bool enable) final</td></tr>
<tr class="memdesc:a11089f69528b17f77a53101c98d32b26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable or disable latency estimation. <br /></td></tr>
<tr class="separator:a11089f69528b17f77a53101c98d32b26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c9b553f27cf9bec5bf7a246a880e22b"><td class="memItemLeft" align="right" valign="top"><a id="a9c9b553f27cf9bec5bf7a246a880e22b"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a9c9b553f27cf9bec5bf7a246a880e22b">SetLossFunction</a> (<a class="el" href="namespacecalico_1_1utils.html#aacede3df540b75d2e131f113380f0ce9">utils::LossFunctionType</a> loss, double scale) final</td></tr>
<tr class="memdesc:a9c9b553f27cf9bec5bf7a246a880e22b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setter for loss function and scale. <br /></td></tr>
<tr class="separator:a9c9b553f27cf9bec5bf7a246a880e22b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a716548611fcd3de2fa5da2ae04c3d951"><td class="memItemLeft" align="right" valign="top">absl::StatusOr&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a716548611fcd3de2fa5da2ae04c3d951">AddParametersToProblem</a> (ceres::Problem &amp;problem) final</td></tr>
<tr class="memdesc:a716548611fcd3de2fa5da2ae04c3d951"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add this sensor's calibration parameters to the ceres problem.  <a href="classcalico_1_1sensors_1_1Camera.html#a716548611fcd3de2fa5da2ae04c3d951">More...</a><br /></td></tr>
<tr class="separator:a716548611fcd3de2fa5da2ae04c3d951"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade8c66c0e1e8a1e18b8a42ebeec5b2f2"><td class="memItemLeft" align="right" valign="top">absl::StatusOr&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#ade8c66c0e1e8a1e18b8a42ebeec5b2f2">AddResidualsToProblem</a> (ceres::Problem &amp;problem, <a class="el" href="classcalico_1_1Trajectory.html">Trajectory</a> &amp;sensorrig_trajectory, <a class="el" href="classcalico_1_1WorldModel.html">WorldModel</a> &amp;world_model) final</td></tr>
<tr class="memdesc:ade8c66c0e1e8a1e18b8a42ebeec5b2f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Contribue this sensor's residuals to the ceres problem.  <a href="classcalico_1_1sensors_1_1Camera.html#ade8c66c0e1e8a1e18b8a42ebeec5b2f2">More...</a><br /></td></tr>
<tr class="separator:ade8c66c0e1e8a1e18b8a42ebeec5b2f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa87667f9855c3777686456a94e7ca341"><td class="memItemLeft" align="right" valign="top">absl::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#aa87667f9855c3777686456a94e7ca341">SetMeasurementNoise</a> (double sigma) final</td></tr>
<tr class="memdesc:aa87667f9855c3777686456a94e7ca341"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the measurement noise \(\sigma\).  <a href="classcalico_1_1sensors_1_1Camera.html#aa87667f9855c3777686456a94e7ca341">More...</a><br /></td></tr>
<tr class="separator:aa87667f9855c3777686456a94e7ca341"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9baffab8e9436f340279bababa7647eb"><td class="memItemLeft" align="right" valign="top">absl::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a9baffab8e9436f340279bababa7647eb">UpdateResiduals</a> (ceres::Problem &amp;problem) final</td></tr>
<tr class="memdesc:a9baffab8e9436f340279bababa7647eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Update residuals for this sensor.  <a href="classcalico_1_1sensors_1_1Camera.html#a9baffab8e9436f340279bababa7647eb">More...</a><br /></td></tr>
<tr class="separator:a9baffab8e9436f340279bababa7647eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac3dd051f602022c4ef6fbed017097cb8"><td class="memItemLeft" align="right" valign="top"><a id="ac3dd051f602022c4ef6fbed017097cb8"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#ac3dd051f602022c4ef6fbed017097cb8">ClearResidualInfo</a> () final</td></tr>
<tr class="memdesc:ac3dd051f602022c4ef6fbed017097cb8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear all stored info about residuals. <br /></td></tr>
<tr class="separator:ac3dd051f602022c4ef6fbed017097cb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0e9befdb75b27e43995b5f1761be065"><td class="memItemLeft" align="right" valign="top">absl::StatusOr&lt; std::vector&lt; <a class="el" href="structcalico_1_1sensors_1_1CameraMeasurement.html">CameraMeasurement</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#ae0e9befdb75b27e43995b5f1761be065">Project</a> (const std::vector&lt; double &gt; &amp;interp_times, const <a class="el" href="classcalico_1_1Trajectory.html">Trajectory</a> &amp;sensorrig_trajectory, const <a class="el" href="classcalico_1_1WorldModel.html">WorldModel</a> &amp;world_model) const</td></tr>
<tr class="memdesc:ae0e9befdb75b27e43995b5f1761be065"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute synthetic camera measurements given a <a class="el" href="classcalico_1_1Trajectory.html">Trajectory</a> and <a class="el" href="classcalico_1_1WorldModel.html">WorldModel</a>.  <a href="classcalico_1_1sensors_1_1Camera.html#ae0e9befdb75b27e43995b5f1761be065">More...</a><br /></td></tr>
<tr class="separator:ae0e9befdb75b27e43995b5f1761be065"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace7ca82c229cd4de0e058e3a0456bb6c"><td class="memItemLeft" align="right" valign="top"><a id="ace7ca82c229cd4de0e058e3a0456bb6c"></a>
absl::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#ace7ca82c229cd4de0e058e3a0456bb6c">SetModel</a> (<a class="el" href="namespacecalico_1_1sensors.html#a1eaf57959273c4ea8dc8899a2e724a2f">CameraIntrinsicsModel</a> camera_model)</td></tr>
<tr class="memdesc:ace7ca82c229cd4de0e058e3a0456bb6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setter for the camera model. <br /></td></tr>
<tr class="separator:ace7ca82c229cd4de0e058e3a0456bb6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a027ef318bd657e7872ab2b83f1b37806"><td class="memItemLeft" align="right" valign="top"><a id="a027ef318bd657e7872ab2b83f1b37806"></a>
<a class="el" href="namespacecalico_1_1sensors.html#a1eaf57959273c4ea8dc8899a2e724a2f">CameraIntrinsicsModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a027ef318bd657e7872ab2b83f1b37806">GetModel</a> () const</td></tr>
<tr class="memdesc:a027ef318bd657e7872ab2b83f1b37806"><td class="mdescLeft">&#160;</td><td class="mdescRight">Getter for the camera model. <br /></td></tr>
<tr class="separator:a027ef318bd657e7872ab2b83f1b37806"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9dcd06c38f567d1f799a88485e27133a"><td class="memItemLeft" align="right" valign="top">absl::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a9dcd06c38f567d1f799a88485e27133a">AddMeasurement</a> (const <a class="el" href="structcalico_1_1sensors_1_1CameraMeasurement.html">CameraMeasurement</a> &amp;measurement)</td></tr>
<tr class="memdesc:a9dcd06c38f567d1f799a88485e27133a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a single camera measurement to the measurement list.  <a href="classcalico_1_1sensors_1_1Camera.html#a9dcd06c38f567d1f799a88485e27133a">More...</a><br /></td></tr>
<tr class="separator:a9dcd06c38f567d1f799a88485e27133a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08c7d495c75347af3c3ab52da404651b"><td class="memItemLeft" align="right" valign="top">absl::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a08c7d495c75347af3c3ab52da404651b">AddMeasurements</a> (const std::vector&lt; <a class="el" href="structcalico_1_1sensors_1_1CameraMeasurement.html">CameraMeasurement</a> &gt; &amp;measurements)</td></tr>
<tr class="memdesc:a08c7d495c75347af3c3ab52da404651b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add multiple measurements to the measurement list.  <a href="classcalico_1_1sensors_1_1Camera.html#a08c7d495c75347af3c3ab52da404651b">More...</a><br /></td></tr>
<tr class="separator:a08c7d495c75347af3c3ab52da404651b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1eb7ef5bfad613058b91c6c2e64d3577"><td class="memItemLeft" align="right" valign="top">const absl::flat_hash_map&lt; <a class="el" href="structcalico_1_1sensors_1_1CameraObservationId.html">CameraObservationId</a>, <a class="el" href="structcalico_1_1sensors_1_1CameraMeasurement.html">CameraMeasurement</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a1eb7ef5bfad613058b91c6c2e64d3577">GetMeasurementIdToMeasurement</a> () const</td></tr>
<tr class="separator:a1eb7ef5bfad613058b91c6c2e64d3577"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a968e1e41652bc4b995167f46d25158d3"><td class="memItemLeft" align="right" valign="top">absl::StatusOr&lt; std::vector&lt; std::pair&lt; <a class="el" href="structcalico_1_1sensors_1_1CameraMeasurement.html">CameraMeasurement</a>, Eigen::Vector2d &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a968e1e41652bc4b995167f46d25158d3">GetMeasurementResidualPairs</a> () const</td></tr>
<tr class="memdesc:a968e1e41652bc4b995167f46d25158d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a vector of measurement-residual pairs.  <a href="classcalico_1_1sensors_1_1Camera.html#a968e1e41652bc4b995167f46d25158d3">More...</a><br /></td></tr>
<tr class="separator:a968e1e41652bc4b995167f46d25158d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5759c8a34c761bffb4395efa4cf21feb"><td class="memItemLeft" align="right" valign="top">absl::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a5759c8a34c761bffb4395efa4cf21feb">MarkOutlierById</a> (const <a class="el" href="structcalico_1_1sensors_1_1CameraObservationId.html">CameraObservationId</a> &amp;id)</td></tr>
<tr class="memdesc:a5759c8a34c761bffb4395efa4cf21feb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tag a single measurement as an outlier by its measurement ID.  <a href="classcalico_1_1sensors_1_1Camera.html#a5759c8a34c761bffb4395efa4cf21feb">More...</a><br /></td></tr>
<tr class="separator:a5759c8a34c761bffb4395efa4cf21feb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03545dedcba42332b8bff030313cad72"><td class="memItemLeft" align="right" valign="top">absl::Status&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a03545dedcba42332b8bff030313cad72">MarkOutliersById</a> (const std::vector&lt; <a class="el" href="structcalico_1_1sensors_1_1CameraObservationId.html">CameraObservationId</a> &gt; &amp;ids)</td></tr>
<tr class="memdesc:a03545dedcba42332b8bff030313cad72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tag multiple measurements as outliers by measurement ID.  <a href="classcalico_1_1sensors_1_1Camera.html#a03545dedcba42332b8bff030313cad72">More...</a><br /></td></tr>
<tr class="separator:a03545dedcba42332b8bff030313cad72"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5325f0d32408e6943dbff9ecc21f4b85"><td class="memItemLeft" align="right" valign="top"><a id="a5325f0d32408e6943dbff9ecc21f4b85"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a5325f0d32408e6943dbff9ecc21f4b85">ClearOutliersList</a> ()</td></tr>
<tr class="memdesc:a5325f0d32408e6943dbff9ecc21f4b85"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear outliers list. <br /></td></tr>
<tr class="separator:a5325f0d32408e6943dbff9ecc21f4b85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af64ff916c26dc115d77dc26d8291f6da"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#af64ff916c26dc115d77dc26d8291f6da">ClearMeasurements</a> ()</td></tr>
<tr class="memdesc:af64ff916c26dc115d77dc26d8291f6da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear all measurements.  <a href="classcalico_1_1sensors_1_1Camera.html#af64ff916c26dc115d77dc26d8291f6da">More...</a><br /></td></tr>
<tr class="separator:af64ff916c26dc115d77dc26d8291f6da"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50b01a329665dae5288b7782c9f92096"><td class="memItemLeft" align="right" valign="top"><a id="a50b01a329665dae5288b7782c9f92096"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcalico_1_1sensors_1_1Camera.html#a50b01a329665dae5288b7782c9f92096">NumberOfMeasurements</a> () const</td></tr>
<tr class="memdesc:a50b01a329665dae5288b7782c9f92096"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get current number of measurements stored. <br /></td></tr>
<tr class="separator:a50b01a329665dae5288b7782c9f92096"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p><a class="el" href="classcalico_1_1sensors_1_1Camera.html" title="Camera class.">Camera</a> class. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a9dcd06c38f567d1f799a88485e27133a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9dcd06c38f567d1f799a88485e27133a">&#9670;&nbsp;</a></span>AddMeasurement()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">absl::Status calico::sensors::Camera::AddMeasurement </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcalico_1_1sensors_1_1CameraMeasurement.html">CameraMeasurement</a> &amp;&#160;</td>
          <td class="paramname"><em>measurement</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Add a single camera measurement to the measurement list. </p>
<p>Returns an error if the measurement's id is duplicated without adding. </p>

</div>
</div>
<a id="a08c7d495c75347af3c3ab52da404651b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a08c7d495c75347af3c3ab52da404651b">&#9670;&nbsp;</a></span>AddMeasurements()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">absl::Status calico::sensors::Camera::AddMeasurements </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; <a class="el" href="structcalico_1_1sensors_1_1CameraMeasurement.html">CameraMeasurement</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>measurements</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Add multiple measurements to the measurement list. </p>
<p>Returns an error status if any measurements are duplicates within its internally managed set of measurements.<br  />
<br  />
<b>Note: If this method encounters any duplicates, it will STILL attempt to add the entire vector. If it returns an error status, it means that all unique measurements have been added, but duplicates have been skipped.</b> </p>

</div>
</div>
<a id="a716548611fcd3de2fa5da2ae04c3d951"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a716548611fcd3de2fa5da2ae04c3d951">&#9670;&nbsp;</a></span>AddParametersToProblem()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">absl::StatusOr&lt; int &gt; calico::sensors::Camera::AddParametersToProblem </td>
          <td>(</td>
          <td class="paramtype">ceres::Problem &amp;&#160;</td>
          <td class="paramname"><em>problem</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">final</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Add this sensor's calibration parameters to the ceres problem. </p>
<p>Returns the number of parameters added to the problem, which should be intrinsics + extrinsics + latency. If the sensor's model hasn't been set yet, it will return an invalid argument error. </p>

<p>Implements <a class="el" href="classcalico_1_1sensors_1_1Sensor.html#a54f63f5a3b982b444d3a77724ec0a4cd">calico::sensors::Sensor</a>.</p>

</div>
</div>
<a id="ade8c66c0e1e8a1e18b8a42ebeec5b2f2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ade8c66c0e1e8a1e18b8a42ebeec5b2f2">&#9670;&nbsp;</a></span>AddResidualsToProblem()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">absl::StatusOr&lt; int &gt; calico::sensors::Camera::AddResidualsToProblem </td>
          <td>(</td>
          <td class="paramtype">ceres::Problem &amp;&#160;</td>
          <td class="paramname"><em>problem</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classcalico_1_1Trajectory.html">Trajectory</a> &amp;&#160;</td>
          <td class="paramname"><em>sensorrig_trajectory</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classcalico_1_1WorldModel.html">WorldModel</a> &amp;&#160;</td>
          <td class="paramname"><em>world_model</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">final</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Contribue this sensor's residuals to the ceres problem. </p>
<p><code>sensorrig_trajectory</code> is the world-from-sensorrig trajectory \(\mathbf{T}^w_r(t)\). </p>

<p>Implements <a class="el" href="classcalico_1_1sensors_1_1Sensor.html#a7b60ca0610c6caa6a3278f7da5a251d8">calico::sensors::Sensor</a>.</p>

</div>
</div>
<a id="af64ff916c26dc115d77dc26d8291f6da"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af64ff916c26dc115d77dc26d8291f6da">&#9670;&nbsp;</a></span>ClearMeasurements()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void calico::sensors::Camera::ClearMeasurements </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Clear all measurements. </p>
<p>This will also clear any internally stored residuals and marked outliers. </p>

</div>
</div>
<a id="a1eb7ef5bfad613058b91c6c2e64d3577"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1eb7ef5bfad613058b91c6c2e64d3577">&#9670;&nbsp;</a></span>GetMeasurementIdToMeasurement()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const absl::flat_hash_map&lt; <a class="el" href="structcalico_1_1sensors_1_1CameraObservationId.html">CameraObservationId</a>, <a class="el" href="structcalico_1_1sensors_1_1CameraMeasurement.html">CameraMeasurement</a> &gt; &amp; calico::sensors::Camera::GetMeasurementIdToMeasurement </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Getter for all measurements. Returns a map of observation ids to measurements. Will be empty if there are no measurements. </p>

</div>
</div>
<a id="a968e1e41652bc4b995167f46d25158d3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a968e1e41652bc4b995167f46d25158d3">&#9670;&nbsp;</a></span>GetMeasurementResidualPairs()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">absl::StatusOr&lt; std::vector&lt; std::pair&lt; <a class="el" href="structcalico_1_1sensors_1_1CameraMeasurement.html">CameraMeasurement</a>, Eigen::Vector2d &gt; &gt; &gt; calico::sensors::Camera::GetMeasurementResidualPairs </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns a vector of measurement-residual pairs. </p>
<p>Only returns for measurements that have residuals. Returns an error if there are more residuals than measurements, or if there are no measurements.<br  />
<br  />
<b>Note: This method will only return residuals for measurements that have NOT been marked as outliers.</b> </p>

</div>
</div>
<a id="a5759c8a34c761bffb4395efa4cf21feb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5759c8a34c761bffb4395efa4cf21feb">&#9670;&nbsp;</a></span>MarkOutlierById()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">absl::Status calico::sensors::Camera::MarkOutlierById </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structcalico_1_1sensors_1_1CameraObservationId.html">CameraObservationId</a> &amp;&#160;</td>
          <td class="paramname"><em>id</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Tag a single measurement as an outlier by its measurement ID. </p>
<p><a class="el" href="classcalico_1_1sensors_1_1Camera.html" title="Camera class.">Camera</a> class keeps track of an outliers list internally. If passed a measurement ID that does not correspond with any measurement tracked by this camera, an InvalidArgument status is returned. </p>

</div>
</div>
<a id="a03545dedcba42332b8bff030313cad72"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a03545dedcba42332b8bff030313cad72">&#9670;&nbsp;</a></span>MarkOutliersById()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">absl::Status calico::sensors::Camera::MarkOutliersById </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; <a class="el" href="structcalico_1_1sensors_1_1CameraObservationId.html">CameraObservationId</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>ids</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Tag multiple measurements as outliers by measurement ID. </p>
<p><a class="el" href="classcalico_1_1sensors_1_1Camera.html" title="Camera class.">Camera</a> class keeps track of an outliers list internally. If passed a measurement ID that does not correspond with any measurement tracked by this camera, an InvalidArgument status is returned. </p>

</div>
</div>
<a id="ae0e9befdb75b27e43995b5f1761be065"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0e9befdb75b27e43995b5f1761be065">&#9670;&nbsp;</a></span>Project()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">absl::StatusOr&lt; std::vector&lt; <a class="el" href="structcalico_1_1sensors_1_1CameraMeasurement.html">CameraMeasurement</a> &gt; &gt; calico::sensors::Camera::Project </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; double &gt; &amp;&#160;</td>
          <td class="paramname"><em>interp_times</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classcalico_1_1Trajectory.html">Trajectory</a> &amp;&#160;</td>
          <td class="paramname"><em>sensorrig_trajectory</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classcalico_1_1WorldModel.html">WorldModel</a> &amp;&#160;</td>
          <td class="paramname"><em>world_model</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compute synthetic camera measurements given a <a class="el" href="classcalico_1_1Trajectory.html">Trajectory</a> and <a class="el" href="classcalico_1_1WorldModel.html">WorldModel</a>. </p>
<p>This method projects the world model through the kinematic chain at given timestamps. This method returns only valid synthetic measurements as would be observed by the actual sensor, complying with physicality such as features being in front of the camera. Returns measurements in the order of the interpolation timestamps.<br  />
<br  />
<code>interp_times</code> is a vector of timestamps in seconds at which <code>sensorrig_trajectory</code> will be interpolated. No assumptions are made about timestamp uniqueness or order.<br  />
<br  />
<code>sensorrig_trajectory</code> is the world-from-sensorrig trajectory \(\mathbf{T}^w_r(t)\).<br  />
<br  />
 </p>

</div>
</div>
<a id="aa87667f9855c3777686456a94e7ca341"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa87667f9855c3777686456a94e7ca341">&#9670;&nbsp;</a></span>SetMeasurementNoise()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">absl::Status calico::sensors::Camera::SetMeasurementNoise </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>sigma</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">final</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the measurement noise \(\sigma\). </p>
<p>This value is used to weight the sensor's residuals such that: </p><p class="formulaDsp">
\[ \boldsymbol{\Sigma} = \sigma^2\mathbf{I}\\ \boldsymbol{\epsilon} = \boldsymbol{\Sigma}^{-1/2}\left(\mathbf{y} - \mathbf{\hat{y}}\left(\mathbf{x}, \boldsymbol{\beta}\right)\right)\\ \mathbf{J} = \frac{\partial\boldsymbol{\epsilon}}{\partial\delta\boldsymbol{\beta}}\\ \delta\boldsymbol{\beta} = \left(\mathbf{J}^T\mathbf{J}\right)^{-1}\mathbf{J}^T\boldsymbol{\epsilon} \]
</p>
 
<p>Implements <a class="el" href="classcalico_1_1sensors_1_1Sensor.html#afd3eac9105c7168c64212bfdf20f04fa">calico::sensors::Sensor</a>.</p>

</div>
</div>
<a id="a9baffab8e9436f340279bababa7647eb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9baffab8e9436f340279bababa7647eb">&#9670;&nbsp;</a></span>UpdateResiduals()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">absl::Status calico::sensors::Camera::UpdateResiduals </td>
          <td>(</td>
          <td class="paramtype">ceres::Problem &amp;&#160;</td>
          <td class="paramname"><em>problem</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">final</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Update residuals for this sensor. </p>
<p>This will only apply to measurements not marked as outliers.<br  />
<br  />
<b>Note: This method is meant to be invoked by <a class="el" href="classcalico_1_1BatchOptimizer.html">BatchOptimizer</a> ONLY. It is not recommended that you invoke this method manually.</b> </p>

<p>Implements <a class="el" href="classcalico_1_1sensors_1_1Sensor.html#af08e6476f0188cdb77cf912a9026709a">calico::sensors::Sensor</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>calico/sensors/<a class="el" href="camera_8h_source.html">camera.h</a></li>
<li>calico/sensors/camera.cpp</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
</small></address>
</body>
</html>
